package com.wei.czz.framework.game.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wei.czz.common.dto.common.NameValue;
import com.wei.czz.common.dto.game.GamePrizeDto;
import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.vo.game.DeleteGamePrizeVo;
import com.wei.czz.common.vo.game.GamePrizeFormVo;
import com.wei.czz.common.vo.game.GamePrizeVo;
import com.wei.czz.common.vo.game.UpdateGamePrizeStatusVo;
import com.wei.czz.framework.game.entity.GamePrizeEntity;

import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2023-03-16 11:36:29
 * className: GamePrizeService 游戏奖品请求服务接口
 * version: 1.0
 * description:
 */
public interface GamePrizeService extends IService<GamePrizeEntity> {

    /**
     * 保存游戏奖品操作
     * @param gamePrizeVo 参数对象
     */
    void saveGamePrize(GamePrizeVo gamePrizeVo);

    /**
     * 初始化游戏奖品池操作
     * @param gameId 游戏主键
     */
    void initGamePrizePool(Long gameId);

    /**
     * 分页查询游戏奖品操作
     * @param gamePrizeFormVo 参数对象
     * @return 游戏奖品分页数据
     */
    PageDto<GamePrizeDto> pageGamePrizeList(GamePrizeFormVo gamePrizeFormVo);

    /**
     * 批量获取游戏奖品操作
     * @param gameIdList 游戏主键列表
     * @return 游戏奖品列表
     */
    List<GamePrizeEntity> getGamePrizeList(List<Long> gameIdList);

    /**
     * 获取游戏奖品列表操作
     * 只查询简单数据
     * @param gameId 游戏主键
     * @return 游戏奖品列表
     */
    List<NameValue<String>> getSimpleGamePrizeList(Long gameId);

    /**
     * 获取游戏奖品下一个排序等级操作
     * @param gameId 游戏主键
     * @return 下一个排序等级
     */
    Integer getNextSort(Long gameId);

    /**
     * 获取所有游戏奖品的总中奖概率操作
     * @param gameId 游戏主键
     * @return 总中奖概率
     */
    Integer getTotalProbability(Long gameId);

    /**
     * 查询游戏奖品名称映射数据操作
     * @param prizeIdSet 游戏奖品主键集合
     * @return 游戏奖品主键与名称的映射关系
     */
    Map<Long, String> getPrizeNameMap(Set<Long> prizeIdSet);

    /**
     * 修改游戏奖品操作
     * @param gamePrizeVo 参数对象
     */
    void updateGamePrize(GamePrizeVo gamePrizeVo);

    /**
     * 修改游戏奖品状态操作
     * @param updateStatusVo 参数对象
     */
    void updateGamePrizeStatus(UpdateGamePrizeStatusVo updateStatusVo);

    /**
     * 增加游戏奖品使用数操作
     * @param prizeId 奖品主键
     */
    void addUseNum(Long prizeId);

    /**
     * 删除游戏奖品操作
     * @param deleteGamePrizeVo 参数对象
     */
    void deleteGamePrize(DeleteGamePrizeVo deleteGamePrizeVo);

}

